#include"myvector.h"

#include<iostream>
#include<vector>
#include<string>

using namespace std;

void test_vector1()
{
    vector<int> v;
    v.push_back(1);//在vector的尾部插入数据
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);

    for(int i = 0; i < v.size(); i++)//size()获取有效长度
    {
        cout << v[i] << " ";//支持[下标]的方式随机访问
    }
    cout << endl;

    v.pop_back();//尾删数据
        for(int i = 0; i < v.size(); i++)//size()获取有效长度
    {
        cout << v[i] << " ";//支持[下标]的方式随机访问
    }
    cout << endl;

    v[0] += 10; //支持类似于数组的操作方式
    v[1]++;

    for(int i = 0; i < v.size(); i++)//size()获取有效长度
    {
        cout << v[i] << " ";//支持[下标]的方式随机访问
    }
    cout << endl;

}

void test_vector2()
{
    int arr[] = {1,2,3,4,5,6};
    //vector也支持迭代器区间初始化
    vector<int> v(arr,arr+(sizeof(arr) / sizeof(int)));

    //迭代器的简单使用
    vector<int>::iterator vit = v.begin();//将vector其实位置
    while(vit != v.end())
    {
        cout << (*vit) << " ";
        ++vit;
    }
    cout << endl;

    //支持迭代器就支持范围for
    for(auto& e : v)
    {
        cout << e << " ";
    }
    cout << endl;

    int tmp[] = {3,1,6,8,9,10};
    //用inset插入一段迭代器区间
    v.insert(v.end(),tmp,tmp+((sizeof(tmp)/ sizeof(int))));

    for(auto& e : v)
    {
        cout << e << " ";
    }
    cout << endl;

    //使用erase删除一段区间
    v.erase(v.begin(), v.begin() + 3);


    for(auto& e : v)
    {
        cout << e << " ";
    }
    cout << endl;
}

void test_vector3()
{
    vector<int> v1(10);//初始化10个元素，默认为0
    vector<int> v2(10,2);//初始化10个2，
    vector<int> v3;
    v3.resize(10,4);//使用resize接口,调整vector的有效长度，第二个参数不给默认为0
    
    auto rit = v1.rbegin();
    while(rit != v1.rend())
    {
        cout << (*rit) << " ";
        ++rit;
    }
    cout << endl;

    for(auto& e : v2)
    {
        cout << e << " ";
    }
    cout << endl;

    for(auto& e : v3)
    {
        cout << e << " ";
    }
    cout << endl;
}

void test_vector4()
{
    vector<int> myVector = {1, 2, 3, 4, 5};

    // 迭代器指向第三个元素
    vector<int>::iterator it = myVector.begin() + 2;

    // 在第三个元素之后插入一个新元素
    myVector.insert(it + 1, 99);

    // 此时，原来的迭代器 it 可能已经失效

    // 尝试使用失效的迭代器
    cout << "Value at original iterator position: " << *it << endl; // 这可能导致未定义的行为

}


int main()
{
    test_vector4();
    return  0;
}
